/**
 * @desc  [自定义校验规则]
 * @example
 *  import { validateRule } from "@/utils/validateRules";
 *  rules: [
 *     { validator: validateRule.emailValue, trigger: 'blur'}
 *  ]
 */
import store from "@/store";

export const rule = {
  /**
   * 校验 请输入中文、英文、数字包括下划线
   * 名称校验
   */
  validatorNameCn(rule, value, callback) {
    const acount = /^[\u4E00-\u9FA5A-Za-z0-9_]+$/
    if (value && !acount.test(value)) {
      callback(new Error('请输入中文、英文、数字包括下划线'))
    } else {
      callback()
    }
  },
  /**
   * 校验 请输入中文、英文、数字包括下划线
   * 名称校验
   */
  validatorKey(rule, value, callback) {
    const acount = /^[A-Z_]+$/
    if (value && !acount.test(value)) {
      callback(new Error('请输入大写英文、下划线'))
    } else {
      callback()
    }
  },

  /**
   * 校验首尾空白字符的正则表达式
   *
   */
  checkSpace(rule, value, callback) {
    const longrg = /[^\s]+$/
    if (!longrg.test(value)) {
      callback(new Error('请输入非空格信息'))
    } else {
      callback()
    }
  },
  validatorPassword(rule, value, callback) {
    const userPasswordStrength = store.state.config.userPasswordStrength
    if (userPasswordStrength === '强') {
      passwordRule.validatorPasswordStrong(rule, value, callback)
    } else if (userPasswordStrength === '中') {
      passwordRule.validatorPasswordMedium(rule, value, callback)
    } else {
      callback()
    }
  }
}

export const passwordRule = {
  /**
   * 验证密码（强）
   *
   */
  validatorPasswordStrong(rule, value, callback) {
    const regExp = /^(?![0-9A-Za-z]+$)(?![0-9A-Z\W]+$)(?![0-9a-z\W]+$)(?![A-Za-z\W]+$)[0-9A-Za-z~!@#$%^&*()_+`\-={}|[\]\\:";'<>?,./]{8,}$/
    if (!regExp.test(value)) {
      callback(new Error('密码由大写字母、小写字母、数字和特殊符号组，并且长度不少于8位，例：Abc12345678#'))
    } else {
      callback()
    }
  },
  /**
   * 验证密码（中）
   *
   */
  validatorPasswordMedium(rule, value, callback) {
    const regExp = /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$/
    if (!regExp.test(value)) {
      callback(new Error('密码由字母和数字组成,例如：a12345678'))
    } else {
      callback()
    }
  }
}
